﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Telerik.Web.UI;
using SMA.GENTEv1;
using System.IO;

public partial class Protegidos_Pessoas_DadosPessoa__popup_ppAfastamentos : PageBase
{
    private const string dbPath = "arq/";
    protected int idAfastamento = 0;
    protected int idAtestadoPai = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["Id"] != null)
            idAfastamento = int.Parse(Request.QueryString["Id"].ToString());

        if (Request.QueryString["IdAtestadoPai"] != null)
            idAtestadoPai = int.Parse(Request.QueryString["IdAtestadoPai"].ToString());

        if (!IsPostBack)
        {
            trResultado.Visible = false;
            CarregarTipo(rcbTipoAfastamento);
            CarregarMotivoAfastamento(rcbMotivoAfastamento);

            trHoraInicio.Visible = false;
            trHoraTermino.Visible = false;

            if (idAfastamento != 0)
                CarregaDados();
        }
    }

    #region Eventos
    protected void btnSalvar_Click(object sender, EventArgs e)
    {
        try
        {
            GravarArquivo();
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }
    protected void btnFechar_Click(object sender, EventArgs e)
    {
        if (idAtestadoPai == 0)
            ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('atestado');", true);
        else
            ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CancelEdit();", true);
    }
    protected void rcbTipoAfastamento_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        ExibirHora();
    }
    #endregion

    #region Metodos
    private void CarregaDados()
    {
        PessoaAfastamento afastamento = new PessoaAfastamento(idAfastamento);

        rcbTipoAfastamento.SelectedValue = afastamento.TipoAfastamento.IdTipoAfastamento.ToString();
        rcbMotivoAfastamento.SelectedValue = afastamento.TipoMotivoAfastamento.IdMotivoAfastamento.ToString();
        ExibirHora();

        txtDataInicio.SelectedDate = afastamento.PeriodoInicial;
        txtPrevisaoTermino.SelectedDate = afastamento.PeriodoFinal;

        txtHoraInicio.SelectedDate = afastamento.PeriodoInicial;
        txtHoraTermino.SelectedDate = afastamento.PeriodoFinal;

        txtObservacao.Text = afastamento.Observacoes;
        txtTerminoReal.SelectedDate = afastamento.PeriodoFinalReal;
    }
    private void ExibirHora()
    {
        if (rcbTipoAfastamento.SelectedValue == "1")
        {
            trHoraInicio.Visible = true;
            trHoraTermino.Visible = true;
        }
        else
        {
            trHoraInicio.Visible = false;
            trHoraTermino.Visible = false;
        }
    }
    private void CarregarTipo(RadComboBox combo)
    {
        try
        {
            TipoAfastamento tipoAfastamento = new TipoAfastamento();

            combo.DataTextField = "Descricao";
            combo.DataValueField = "IdTipoAfastamento";
            combo.DataSource = tipoAfastamento.SelectAll();
            combo.DataBind();

            InserirSelecione(combo);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    private void CarregarMotivoAfastamento(RadComboBox combo)
    {
        try
        {
            TipoMotivoAfastamento motivoAfastamento = new TipoMotivoAfastamento();

            combo.DataTextField = "Descricao";
            combo.DataValueField = "IdMotivoAfastamento";
            combo.DataSource = motivoAfastamento.SelectAll();
            combo.DataBind();

            InserirSelecione(combo);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    private void InserirSelecione(RadComboBox combo)
    {
        try
        {
            combo.Items.Insert(0, new RadComboBoxItem(" -- Selecione -- ", "0"));
            combo.SelectedIndex = 0;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    private void GravarArquivo()
    {
        string nameFile = Salvar();

        if (RadUpload1.UploadedFiles.Count > 0)
        {
            foreach (UploadedFile validFile in RadUpload1.UploadedFiles)
            {
                string targetFolder = Server.MapPath("~/Arq");
                validFile.SaveAs(Path.Combine(targetFolder, nameFile), true);
            }

            labelNoResults.Visible = false;
            repeaterResults.Visible = true;
            repeaterResults.DataSource = RadUpload1.UploadedFiles;
            repeaterResults.DataBind();
        }
        else
        {
            labelNoResults.Visible = true;
            repeaterResults.Visible = false;
        }

        trResultado.Visible = true;
        tr1.Visible = false;
        tr2.Visible = false;
        tr3.Visible = false;
        trSeleciona.Visible = false;
        btnSalvar.Visible = false;
        trMsg.Visible = false;

    }
    protected string Salvar()
    {
        string name = string.Empty;

        PessoaAfastamento afastamento = new PessoaAfastamento();

        afastamento.IdAfastamento = idAfastamento;
        afastamento.IdPessoa = IdPessoa;

        if (idAtestadoPai != 0)
            afastamento.IdAtestadoPai = idAtestadoPai;

        afastamento.TipoAfastamento = new TipoAfastamento(int.Parse(rcbTipoAfastamento.SelectedValue));
        afastamento.TipoMotivoAfastamento = new TipoMotivoAfastamento(int.Parse(rcbMotivoAfastamento.SelectedValue));

        if (rcbTipoAfastamento.SelectedValue == "1")
        {
            afastamento.PeriodoInicial = txtDataInicio.SelectedDate.Value.AddHours(txtHoraInicio.SelectedDate.Value.Hour).AddMinutes(txtHoraInicio.SelectedDate.Value.Minute);
            afastamento.PeriodoFinal = txtPrevisaoTermino.SelectedDate.Value.AddHours(txtHoraTermino.SelectedDate.Value.Hour).AddMinutes(txtHoraTermino.SelectedDate.Value.Minute);
        }
        else
        {
            afastamento.PeriodoInicial = txtDataInicio.SelectedDate;
            afastamento.PeriodoFinal = txtPrevisaoTermino.SelectedDate;
        }

        afastamento.Observacoes = txtObservacao.Text;
        afastamento.PeriodoFinalReal = txtTerminoReal.SelectedDate;

        afastamento.Salvar();

        name = "AFAST" + IdPessoa.ToString() + afastamento.IdAfastamento.ToString() + ".pdf";
        afastamento.Path = name;
        afastamento.AtualizaPath();

        return name;
    }
    #endregion
}
